In contemporary multitasking data processing systems, operating systems, for instance, systems operating under operating system OS/2 versions 1.0, 1.1 and 1.2, input/output (I/O) operations relative to disk storage devices are scheduled in sequences which are essentially unrelated to the relative time urgencies of tasks waiting for such functions to be carried out.
For example, in OS/2 Versions 1.0, 1.1, and 1.2, I/O activities relative to a disk device are ordered in an "elevator" sequence in which I/O requests are arranged in an associated service queue in a positional sequence designed to allow servicing of all enqueued requests having targeted storage locations reachable while the read/write head of the disk is continuing in its present direction of motion. This is analogous to the familiar sequence followed by building elevators, wherein an elevator car moving upward continues upward to all selected floors, ignoring calls for service from floors which have been passed, and an elevator car moving downward stops at all selected floors ignoring calls for service from higher floors which it has passed. Similarly, in prior art OS/2 system disk I/O requests are enqueued alternately in sequences of increasing and decreasing associated RBA (relative block address) values representing their targeted disk storage locations.
In such systems, I/O requests directed to a specific disk drive are held in a single linked list service queue associated with that drive. The next request to be served is always the one located at the head end of the queue. While the R/W (read/write) head of the associated drive is moving in a direction of increasing RBA locations relative to the disk, requests designating RBA locations reachable in that direction (not yet passed by the head) are positioned in the queue in a sequence of increasing RBA's starting at the head end, and requests designating RBA locations reachable only after a reversal of R/W head direction are arranged further along the queue in a sequence of decreasing RBA's. When the operating system service kernel responsible for placing requests in the queue receives another request designating the same drive, it determines the present position and direction of movement of the R/W head (from the RBA's of the last 2 requests removed from the queue for service) and places the received request into the queue in a position for it to receive "elevator sequence" service in line with other enqueued requests.
Thus, if the R/W head is moving in the direction of increasing RBA disk locations, and a request at the head end of the service queue has an RBA representing a disk location reachable without reversing the direction of R/W head movement, all enqueued requests having such reachable RBA's are enqueued in a block having progressively ascending request RBA values starting at the head end of the queue. Any newly presented request having an RBA representing a location reachable without a change in R/W head direction is inserted into the head end block so as to maintain the ascending order of request RBA's in the block. A new request having an RBA representing a location already passed by the head is placed in a second block in which the request RBA's are ordered in descending sequence. Thus, after all requests in the first block have been serviced, the direction of the R/W head will be reversed and requests in the second block will receive service consecutively.
Although such "elevator" ordering effectively guarantees that all requests will be serviced, it does not ensure efficient service since the priorities of tasks with which such requests are associated are not given any consideration. Thus, disk I/O requests having real-time association with a human heart operation stand to receive no better service than requests associated with continuation of a recreational game. Furthermore, since the rate of presentation of disk I/O requests in any system tends to increase in inverse relation to memory constraints (i.e. the smaller the system memory, the more frequent the access to disks) and in direct relation to the number of tasks concurrently processed, it is clear that in an efficiently utilized multitasking system with small memory capacity, the average delay in servicing disk I/O requests could become so large as to require system users to place undesirable constraints on their use of the system.